package com.seuic.hnapps.util;

import com.orhanobut.logger.Logger;
import com.solab.enc.DES3;
import com.solab.iso8583.IsoMessage;
import com.solab.iso8583.IsoType;

/**
 * 行名行号查询
 */
public class QBInterface {
    public IsoMessage packRequest(String transn, String bank_type, String otherbank) {
        IsoMessage msg = new IsoMessage();
        String encflag = Constants.YANTAI_ENCFLG2;
        msg.setType(0x0100);
        msg.setHeadValue(1, String.valueOf(Constants.ATMP_HEADER_LENGTH), IsoType.BCD, 2);
        msg.setHeadValue(2, Constants.YANTAI_PACKVS, IsoType.ALPHA, 2);
        msg.setHeadValue(3, Constants.YANTAI_TERMVS, IsoType.ALPHA, 8);
        msg.setHeadValue(4, encflag, IsoType.ALPHA, 1); // 加密标志：业务交易，公网传输1-报文加密，专线传输2-磁道加密
        msg.setHeadValue(5, Constants.YANTAI_BANKID, IsoType.ALPHA, 8);
        msg.setHeadValue(6, Constants.YANTAI_TERMNO, IsoType.ALPHA, 8);
        msg.setHeadValue(7, "0000", IsoType.ALPHA, 4); // 8583域部分长度，组包时动态填充
//
        msg.setValue(3, "340000", IsoType.ALPHA, 6);
        msg.setValue(7, DateUtil.getCurrentTime(DateUtil.NOMAL_DATETIME), IsoType.ALPHA, 10);
        msg.setValue(8, Constants.YANTAI_CHANLENO, IsoType.ALPHA, 2);
        msg.setValue(11, transn, IsoType.ALPHA, 6);
        // 第20域，需要严格按照规范填写 21121（6）00
        msg.setValue(20, "21121000", IsoType.ALPHA, 8);
        // 第22域，需要严格按照规范填写 手工输入01 磁条读取02 IC卡 05 第三位是否有密码1 无密码2

        msg.setValue(22, "021", IsoType.ALPHA, 3);

        msg.setValue(41, Constants.YANTAI_TERMNO, IsoType.ALPHA, 8);
        if(Constants.isSM){
            msg.setValue(53, Constants.DEMO_F53, IsoType.ALPHA, 16);
        }
        msg.setValue(57, Constants.YANTAI_F57, IsoType.LLLVAR, 127);
        // 第60域，按实际填写
        msg.setValue(60, Constants.YANTAI_BATCHNO + "5" + "0", IsoType.LLVAR, 30);
        String f122 = "";
        String f122name = "";

        if (bank_type.equals("中国工商银行")) {
            f122name = "102|中国工商银行|";
            f122 = "HM0" + getWordCount(f122name) + f122name;
            Logger.e(f122);
        } else if (bank_type.equals("中国农业银行")) {
            f122name = "103|中国农业银行|";
            f122 = "HM0" + getWordCount(f122name) + f122name;
            Logger.e(f122);
        } else if (bank_type.equals("中国银行")) {
            f122name = "104|中国银行|";
            f122 = "HM0" + getWordCount(f122name) + f122name;
            Logger.e(f122);
        } else if (bank_type.equals("中国建设银行")) {
            f122name = "105|中国建设银行|";
            f122 = "HM0" + getWordCount(f122name) + f122name;
            Logger.e(f122);
        } else if (bank_type.equals("交通银行")) {
            f122name = "301|交通银行|";
            f122 = "HM0" + getWordCount(f122name) + f122name;
            Logger.e(f122);
        } else if (bank_type.equals("招商银行")) {
            f122name = "308|招商银行|";
            f122 = "HM0" + getWordCount(f122name) + f122name;
            Logger.e(f122);
        } else if (bank_type.equals("其他")) {
            f122name = " |" + otherbank + "|";
            f122 = "HM0" + getWordCount(f122name) + f122name;
            Logger.e(f122);
        }
        msg.setValue(122, f122, IsoType.LLLVAR, 512);
        // MAC，填写8字节，则需要生成MAC，外层统一处理；本域不填写，则外层不会生成
        msg.setValue(128, "00000000", IsoType.ALPHA, 8);
        return msg;
    }

    public int getWordCount(String s) {
        s = s.replaceAll("[^\\x00-\\xff]", "**");
        int length = s.length();
        return length;
    }
}
